package com.sisgesbyte.web.managedBean.paginaweb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.services.administracion.MantenimientoMarca;
import com.sisgesbyte.services.administracion.MantenimientoProducto;
import com.sisgesbyte.services.administracion.bean.MarcaBean;
import com.sisgesbyte.services.administracion.bean.MarcaListaResponse;
import com.sisgesbyte.services.administracion.bean.ProductoBean;
import com.sisgesbyte.services.administracion.bean.ProductoListaResponse;

@ManagedBean
@ViewScoped
public class WebProductosxMarcaMBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@EJB
	private MantenimientoProducto mantenimientoProducto;
	@EJB
	private MantenimientoMarca mantenimientoMarca;
	private List<ProductoBean> listaProductos;
	private int idMarca;
	private String marca;
	
	@PostConstruct
	private void init() {
		inicializar();
		cargarMarcas();
	}
	
	public void inicializar(){
		try{
			FacesContext fc = FacesContext.getCurrentInstance();
			Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
			setIdMarca(Integer.valueOf(params.get("codigo")));
		}catch(Exception e){
			setIdMarca(0);
		}
		try{
			FiltrosSQLBean filtros = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			List<Object> valores = new ArrayList<Object>();
			//productos activos
			FiltrosBean filtroCampos = new FiltrosBean();
			List<String> campos = new ArrayList<String>();
			campos.add("p.active");
			filtroCampos.setCampos(campos);
			filtroCampos.setOperador("=");
			listaFiltros.add(filtroCampos);
			valores.add(true);
			if(idMarca > 0){
				//productos por categoria
				FiltrosBean filtroCategoria = new FiltrosBean();
				List<String> camposCategoria = new ArrayList<String>();
				camposCategoria.add("p.marca_id");
				filtroCategoria.setCampos(camposCategoria);
				filtroCategoria.setOperador("=");
				listaFiltros.add(filtroCategoria);
					valores.add(idMarca);
			}
			filtros.setListaFiltros(listaFiltros);
			filtros.setListaValores(valores);
			ProductoListaResponse listaproductos = mantenimientoProducto.listaProductos(ObtenerIdTransaccion() , filtros);
			if(listaproductos.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaProductos = listaproductos.getListaProductos();
			}
		}catch(Exception e){
			System.out.println("Error al obtener la lista de productos " + e.getMessage());
		}
		
	}
	public void cargarMarcas(){
		try{
			MarcaListaResponse response = mantenimientoMarca.listaMarcas(ObtenerIdTransaccion() , null);
			for(MarcaBean ls :response.getListaMarca() ){
				if(idMarca == ls.getId()){
					setMarca(ls.getMarca());
					break;
				}
			}
		}catch(Exception e){
			System.out.println("Error al cargar las marcas " + e.getMessage());
		}
	}
	public String ObtenerIdTransaccion() {
		String sessionId = "";
		try {
			FacesContext fCtx = FacesContext.getCurrentInstance();
			HttpSession session = (HttpSession) fCtx.getExternalContext()
					.getSession(false);
			sessionId = session.getId().replace(".undefined", "");
		} catch (Exception e) {
			sessionId = "Error";
			System.out.println("Error al obtener Session" + e);
		}
		return sessionId;
	}
	public int getIdMarca() {
		return idMarca;
	}

	public void setIdMarca(int idMarca) {
		this.idMarca = idMarca;
	}

	public List<ProductoBean> getListaProductos() {
		return listaProductos;
	}

	public void setListaProductos(List<ProductoBean> listaProductos) {
		this.listaProductos = listaProductos;
	}

	public String getMarca() {
		return marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}

}
